Lambda Expressions এবং Higher-order Functions
কটলিনে Lambda Expressions এবং Higher-order Functions ব্যবহার করে কোড আরও ডাইনামিক এবং ফ্লেক্সিবল করা যায়। এই দুটি কনসেপ্ট আপনাকে কার্যকরভাবে ফাংশন এবং এক্সপ্রেশনগুলো ম্যানিপুলেট করতে দেয়, যা প্রোগ্রামিংকে আরও মডুলার এবং রিডেবল করে। নিচে Lambda Expressions এবং Higher-order Functions নিয়ে বিস্তারিত আলোচনা করা হলো:
১. Lambda Expressions
ল্যাম্বডা এক্সপ্রেশন হলো কটলিনে একটি অ্যানোনিমাস ফাংশন, যা কোনো নাম ছাড়াই লেখা হয়। এটি সাধারণত {} এর ভেতরে থাকে এবং ইনপুট প্যারামিটার এবং আউটপুট এক্সপ্রেশন ধারণ করে।
ল্যাম্বডা এক্সপ্রেশনের সাধারণ ফরম্যাট:
val lambdaName: (InputType) -> ReturnType = { parameter(s) -> expression }
উদাহরণ:
val sum: (Int, Int) -> Int = { a, b -> a + b }
println(sum(5, 3)) // আউটপুট: 8
ব্যাখ্যা:
sumএকটি ল্যাম্বডা এক্সপ্রেশন যা দুটিIntইনপুট নেয় এবং একটিIntরিটার্ন করে।{ a, b -> a + b }হলো ল্যাম্বডা ব্লক যেখানেaএবংbইনপুট প্যারামিটার এবংa + bআউটপুট এক্সপ্রেশন।
it কীওয়ার্ড:
যদি ল্যাম্বডায় একটি মাত্র প্যারামিটার থাকে, তাহলে আপনি সরাসরি it কীওয়ার্ড ব্যবহার করতে পারেন।
উদাহরণ:
val square: (Int) -> Int = { it * it }
println(square(4)) // আউটপুট: 16
ব্যাখ্যা:
- এখানে
squareল্যাম্বডা এক্সপ্রেশনেitএকটি ইনপুট প্যারামিটার হিসেবে কাজ করে এবং এটি ইনপুটের স্কোয়ার রিটার্ন করে।
২. Higher-order Functions
Higher-order Functions হলো এমন ফাংশন, যা একটি ফাংশনকে প্যারামিটার হিসেবে গ্রহণ করতে পারে অথবা একটি ফাংশনকে রিটার্ন করতে পারে। এটি কোডের পুনঃব্যবহারযোগ্যতা এবং ফ্লেক্সিবিলিটি বাড়ায়।
সাধারণ ফরম্যাট:
fun functionName(parameter: (Type) -> ReturnType): ReturnType {
// ফাংশনের ভিতরের কোড
}
উদাহরণ:
fun operateOnNumbers(a: Int, b: Int, operation: (Int, Int) -> Int): Int {
return operation(a, b)
}
val result = operateOnNumbers(10, 5) { x, y -> x + y }
println(result) // আউটপুট: 15
ব্যাখ্যা:
operateOnNumbersহলো একটি higher-order function, যা দুটি সংখ্যা (aএবংb) এবং একটি অপারেশন (ল্যাম্বডা এক্সপ্রেশন) নেয়।{ x, y -> x + y }হলো একটি ল্যাম্বডা এক্সপ্রেশন যাxএবংyএর যোগফল রিটার্ন করে।
Trailing Lambda Syntax
কটলিনে, যদি একটি ফাংশনের শেষ প্যারামিটার একটি ল্যাম্বডা হয়, তবে ল্যাম্বডাটি ফাংশনের বাইরে রেখে লেখা যায়।
উদাহরণ:
val result = operateOnNumbers(10, 5) { x, y -> x * y }
println(result) // আউটপুট: 50
৩. Common Higher-order Functions in Kotlin
কটলিনে অনেক বিল্ট-ইন higher-order function আছে, যেমন: map, filter, forEach ইত্যাদি। এগুলো কালেকশনের উপরে বিভিন্ন লজিক্যাল অপারেশন করতে ব্যবহৃত হয়।
i) map
map ফাংশন একটি কালেকশনের প্রতিটি এলিমেন্টের উপর একটি অপারেশন প্রয়োগ করে এবং নতুন কালেকশন রিটার্ন করে।
উদাহরণ:
val numbers = listOf(1, 2, 3, 4)
val doubled = numbers.map { it * 2 }
println(doubled) // আউটপুট: [2, 4, 6, 8]
ii) filter
filter ফাংশন একটি শর্ত মেনে চলা এলিমেন্টগুলো সিলেক্ট করে নতুন একটি কালেকশন রিটার্ন করে।
উদাহরণ:
val numbers = listOf(1, 2, 3, 4, 5, 6)
val evenNumbers = numbers.filter { it % 2 == 0 }
println(evenNumbers) // আউটপুট: [2, 4, 6]
iii) forEach
forEach ফাংশন একটি কালেকশনের প্রতিটি এলিমেন্টের উপর একটি অপারেশন এক্সিকিউট করে।
উদাহরণ:
val fruits = listOf("Apple", "Banana", "Cherry")
fruits.forEach { println(it) }
ব্যাখ্যা:
- এখানে
forEachফাংশনটিfruitsলিস্টের প্রতিটি এলিমেন্ট প্রিন্ট করে।
উপসংহার
কটলিনে ল্যাম্বডা এক্সপ্রেশন এবং higher-order functions প্রোগ্রামিংকে আরও ডাইনামিক, ফ্লেক্সিবল এবং ফাংশনাল করে তোলে। এগুলো ব্যবহার করে আপনি সহজেই ফাংশনগুলিকে প্যারামিটার হিসেবে পাস করতে পারেন এবং এক্সপ্রেশনগুলোকে আরও ছোট এবং মডুলার রাখতে পারেন।
Read more